package com.binary.coder.gift.core.common.utils;


import java.text.DateFormat;
import java.text.FieldPosition;
import java.text.ParsePosition;
import java.util.Date;

/**
 * .扩展jackson日期格式化支持格式
 */
public class JacksonDateFormat extends DateFormat {

    private static final long serialVersionUID = 1L;

    //序列化时会执行这个方法
    @Override
    public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
        toAppendTo.append(DateUtils.getTimeString(date));
        return toAppendTo;
    }

    //反序列化时执行此方法，我们先让他执行我们自己的format，如果异常则执执行他的
    //当然这里只是简单实现，可以有更优雅的方式来处理更多的格式
    @Override
    public Date parse(String source, ParsePosition pos) {
        Date date;

        try {
            date = DateUtils.toDate(source);
        } catch (Exception e) {
            date = null;
        }

        return date;
    }

    //此方法在objectmapper 默认的dateformat里边用到，这里也要重写
    @Override
    public Object clone() {
        //  DateFormat dateFormat = (DateFormat) this.dateFormat.clone();
        return new JacksonDateFormat();
    }

}
